package main

import "fmt"

func main() {
	/*
		常量：
		1. 概念： 同变量类似, 程序执行过程中数值不能改变
		2. 语法:
			显式类型定义
			隐式类型定义
	*/

	const PATH string = "http://www.baidu.com"
	const PI = 3.14 // 常量可以定义不使用

	fmt.Println(PATH)
	//fmt.Println(PI)

	// 定义一组常量
	const C1, C2, C3 = 100, 3.14, "haha"
	const (
		MALE   = 0
		FEMALE = 1
		UNKOWN = 3
	)

	// 4. 一组常量中, 如果某个常量没有初始值, 默认和上一行一致
	const (
		a int = 100
		b
		c string = "ruby"
		d
		e
	)

	fmt.Printf("%T, %d \n", a, a)
	fmt.Printf("%T, %d \n", b, b)
	fmt.Printf("%T, %s \n", c, c)
	fmt.Printf("%T, %s \n", d, d)
	fmt.Printf("%T, %s \n", e, e)

	// 5. 枚举类型：使用常量组作为枚举类型, 一组相关数值的数据
	/*
		注意事项：
		1. 常量中的数据类型只可以是布尔型, 数字型（整数型, 浮点数和复数）和字符串型
		2. 不曾使用的常量, 在编译的时候, 是不会报错的
		3. 显式指定常量的时候，必须保持左右值类型一致，需要时可做现实类型转换，这与变量就不一样了，变量是可以是不同类型的值
	*/
	const (
		SPRING = 0
		SUMMER = 1
		AUTUMN = 2
		WINTER = 3
	)
}
